<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>什么是promise</title>
  </head>

  <body>

  </body>
  <script>
    /* 
    一.理解Promise
      1.Promise：简单说就是一个容器，里面保存着某个未来才会结束的事件（通常是一个异步操作）的结果。
      2.功能：避免了回调地狱，把异步代码改成调用起来像同步代码。
      3.ES6的promise是一个构造函数，用来生成promise实例
    二.Promise的三种状态
      1.pending:初始化状态
      2.fulfilled:成功状态
      3.rejected: 失败状态
    */
    console.log("1.code start");
    setTimeout(() => {
      console.log("4.定时器");
    }, 0)
    let promise = new Promise((resolve, reject) => {
      //1.初始化状态为pending          ---初始化状态
      console.log("2.初始化promise状态"); //序号标定证明了Promise是同步化执行
      //2.执行异步任务：开启定时器，发送Ajax请求
      //补充：根据异步任务的执行结果去修改Promise对应的状态
      setTimeout(() => {
        // 2.1 如果异步任务结果成功，修改Promise的状态为fulfilled
        // 2.2 需要传递的信息
        let msg = "我是需要传递的信息";
        resolve(msg); //修改Promise的状态为fulfilled
        console.log(promise);

        // 2.2 如果异步任务结果失败，修改Promise的状态为rejected
        // reject(); //修改Promise的状态为rejected
        // console.log(promise);
      }, 2000);
    });
    console.log(promise);
    console.log("3.code ending");

    promise.then((msg) => { //1.当promise对象的状态变为fulfilled,会自动调用then方法的第一个回调
      console.log(msg + ",成功了");
    }, () => { //2.当promise对象的状态变为fulfilled,会自动调用then方法的第二个回调
      console.log("失败了");
    })
  </script>

</html>